// const csv = require('csvtojson')
// const iconv = require('iconv-lite')

// /**
//  *
//  * @param {*} filePath    csv 路径
//  * @param {*} tableName   生成 insert语句的表名称
//  * @param {*} columNames  表的列名
//  * @param {*} csvFiles    csv第几列
//  */

// function foo(filePath, tableName, columNames, csvFiles) {
// 	csv()
// 		.fromFile(filePath, { encoding: 'binary' })
// 		.then((json) => {
// 			//binary和fromFile中的文件读取方式要一致
// 			var buf = Buffer.from(JSON.stringify(json), 'binary') //第一个参数格式是字符串
// 			// var str = iconv.decode(buf, 'GBK') //原文编码我这是GBK
// 			var str = iconv.decode(buf, 'UTF-8') //原文编码我这是GBK
// 			str = JSON.parse(JSON.stringify(str)) //解码后为字符串，需要先转成json字符串
// 			var data = eval(str)
// 			console.log(data)
// 			let res = []
// 			// 动态拼接sql语句

// 			data.forEach((item, index) => {
// 				let columNamesStr = `insert into ${tableName} (id,`
// 				columNames.forEach((item) => {
// 					columNamesStr += `${item},`
// 				})
// 				columNamesStr =
// 					columNamesStr.slice(0, columNamesStr.length - 1) + ') values('

// 				let arr = []
// 				arr[0] = index
// 				let count = 1
// 				csvFiles.forEach((field) => {
// 					let temp = item[field].replace(/\n/g, ',')
// 					arr[count++] = temp
// 				})
// 				arr.forEach((it) => {
// 					columNamesStr += `'${it}',`
// 				})

// 				columNamesStr = columNamesStr.slice(0, columNamesStr.length - 1) + ');'
// 				res.push(columNamesStr)
// 			})
// 			res.shift()
// 			console.log(res)
// 		})
// }
// foo(
// 	'./KPI指标分类 - PJ3关联KPI.csv',
// 	'tableName',
// 	['colum1', 'colum2', 'colum3'],
// 	['field3', 'field5', 'field6']
// )

const csv = require('csvtojson')
const iconv = require('iconv-lite')

// /**
//  * 可以读取csv 文件 根据传入的参数生成对应sql的插入语句
//  * @param {*} filePath    csv 路径
//  * @param {*} tableName   生成 insert语句的表名称
//  * @param {*} columNames  表的列名
//  * @param {*} csvFiles    csv第几列
//  */

// function foo(filePath, tableName, columNames, csvFiles) {
// 	csv()
// 		.fromFile(filePath, { encoding: 'binary' })
// 		.then((json) => {
// 			//binary和fromFile中的文件读取方式要一致
// 			var buf = Buffer.from(JSON.stringify(json), 'binary') //第一个参数格式是字符串
// 			// var str = iconv.decode(buf, 'GBK') //原文编码我这是GBK
// 			var str = iconv.decode(buf, 'UTF-8') //原文编码我这是GBK
// 			str = JSON.parse(JSON.stringify(str)) //解码后为字符串，需要先转成json字符串
// 			var data = eval(str)
// 			console.log(data)
// 			let res = []
// 			// 动态拼接sql语句

// 			data.forEach((item, index) => {
// 				let columNamesStr = `insert into ${tableName} (id,`
// 				columNames.forEach((item) => {
// 					columNamesStr += `${item},`
// 				})
// 				columNamesStr = columNamesStr.slice(0, columNamesStr.length - 1) + ') '

// 				let arr = []
// 				arr[0] = index
// 				let count = 1
// 				let sstr = 'values('
// 				csvFiles.forEach((field) => {
// 					let temp = item[field].replace(/\n/g, ',')
// 					arr[count++] = temp
// 				})
// 				arr.forEach((it) => {
// 					if (it === '同RRC成功率') {
// 						sstr += `'小区PRB上行平均干扰电平,小区PRB上行最大干扰电平,小区PRB上行干扰率,下行DTX误码率,上行残留误码率或MAC层上行误块率,下行残留误码率或MAC层下行误块率,上行MAC层传输初始成功率,下行MAC层传输初始成功率,上行HARQ重传比率,下行HARQ重传比率,平均激活用户数,最大激活用户数,RRC连接平均用户数,RRC连接最大用户数,下行PRB平均利用率（移动）,下行PRB平均利用率（联通）,上行PRB平均利用率（移动）,上行PRB平均利用率（联通）,下行业务信息PRB占用率,上行业务信息PRB占用率,下行PDSCH_RB利用率,上行PUSCH_RB利用率,PDCCH信道CCE占用率,PDCCH信道占用率（动态分母）,PDCCH信道占用率（静态分母）,下行平均RANK,上行平均RANK,小区下行MCS优良率（移动）,小区下行MCS优良率（联通）,上行QPSK编码比例,上行16QAM编码比例,上行64QAM编码比例,上行256QAM编码比例,下行QPSK编码比例,下行16QAM编码比例,下行64QAM编码比例,下行256QAM编码比例,小区平均CQI,上行平均空分层数（移动）,上行平均空分层数（联通）,下行平均空分层数（移动）,下行平均空分层数（联通）',`
// 					} else {
// 						sstr += `'${it}',`
// 					}
// 				})

// 				sstr = sstr.slice(0, sstr.length - 1) + ');'
// 				res.push(columNamesStr + sstr)
// 			})
// 			res.shift()
// 			let tempStr = ''
// 			res.forEach((item) => (tempStr += item))
// 			console.log(tempStr)
// 		})
// }
// foo(
// 	'./KPI指标分类 - PJ3关联KPI.csv',
// 	'tableName',
// 	['colum1', 'colum2', 'colum3'],
// 	['field3', 'field5', 'field6']
// )

/**
 * 可以读取csv 文件 根据传入的参数生成对应sql的插入语句
 * @param {*} filePath    csv 路径
 * @param {*} tableName   生成 insert语句的表名称
 * @param {*} config      sql语句 列名和csv第几列进行映射
 */

function foo(filePath, tableName, config) {
	csv()
		.fromFile(filePath, { encoding: 'binary' })
		.then((json) => {
			//binary和fromFile中的文件读取方式要一致
			var buf = Buffer.from(JSON.stringify(json), 'binary') //第一个参数格式是字符串
			// var str = iconv.decode(buf, 'GBK') //原文编码我这是GBK
			var str = iconv.decode(buf, 'UTF-8') //原文编码我这是GBK
			str = JSON.parse(JSON.stringify(str)) //解码后为字符串，需要先转成json字符串
			var data = eval(str)

			let res = []
			// 动态拼接sql语句

			data.forEach((item, index) => {
				let columNamesStr = `insert into ${tableName} (id,`

				let arr = []
				arr[0] = index
				let count = 1
				let sstr = 'values('

				for (const key in config) {
					if (Object.hasOwnProperty.call(config, key)) {
						// 如果 数据不为 ''
						let value = config[key]
						console.log(item[value])
						if (item[value]) {
							let temp = item[value]?.replace(/\n/g, ',')
							arr[count++] = temp
							columNamesStr += `${key},`
						}
					}
				}
				// 对特殊 值处理
				arr.forEach((it) => {
					if (it === '同RRC成功率') {
						sstr += `'小区PRB上行平均干扰电平,小区PRB上行最大干扰电平,小区PRB上行干扰率,下行DTX误码率,上行残留误码率或MAC层上行误块率,下行残留误码率或MAC层下行误块率,上行MAC层传输初始成功率,下行MAC层传输初始成功率,上行HARQ重传比率,下行HARQ重传比率,平均激活用户数,最大激活用户数,RRC连接平均用户数,RRC连接最大用户数,下行PRB平均利用率（移动）,下行PRB平均利用率（联通）,上行PRB平均利用率（移动）,上行PRB平均利用率（联通）,下行业务信息PRB占用率,上行业务信息PRB占用率,下行PDSCH_RB利用率,上行PUSCH_RB利用率,PDCCH信道CCE占用率,PDCCH信道占用率（动态分母）,PDCCH信道占用率（静态分母）,下行平均RANK,上行平均RANK,小区下行MCS优良率（移动）,小区下行MCS优良率（联通）,上行QPSK编码比例,上行16QAM编码比例,上行64QAM编码比例,上行256QAM编码比例,下行QPSK编码比例,下行16QAM编码比例,下行64QAM编码比例,下行256QAM编码比例,小区平均CQI,上行平均空分层数（移动）,上行平均空分层数（联通）,下行平均空分层数（移动）,下行平均空分层数（联通）',`
					} else {
						sstr += `'${it}',`
					}
				})

				columNamesStr = columNamesStr.slice(0, columNamesStr.length - 1) + ') '
				sstr = sstr.slice(0, sstr.length - 1) + ');'
				res.push(columNamesStr + sstr)
			})
			res.shift()
			let tempStr = ''
			res.forEach((item) => (tempStr += item))
			console.log(tempStr)
		})
}
/**
 * 列名为 colum1 映射 csv 第3列数据
 * 列名为 colum2 映射 csv 第5列数据
 * 列名为 colum3 映射 csv 第6列数据
 * 数据为空则跳过
 */

let config = {
	colum1: 'field3',
	colum2: 'field5',
	colum3: 'field6',
}

foo('./KPI指标分类 - PJ3关联KPI.csv', 'tableName', config)
